/*
这个程序使用递归方法解决汉诺塔问题。
函数 hanoi 接受四个参数：
    n 是盘子的数量
    from 是起始柱子，
    aux 是辅助柱子，
    to 是目标柱子。

如果只有一个盘子，直接将其从起始柱子移动到目标柱子。
否则，先将
n-1个盘子从起始柱子移动到辅助柱子，然后将剩下的盘子从起始柱子移动到目标柱子，
最后将n-1个盘子从辅助柱子移动到目标柱子。

这就是汉诺塔问题的解决方案。你可以根据需要修改main 函数中的 n
的值来改变盘子的数量。

https://www.zhihu.com/zvideo/1312915574650462208
*/
#include <iostream>
using namespace std;

void hanoi(int n, char from, char aux, char to) {
  if (n == 1) {
    cout << "Move disk 1 from rod " << from << " to rod " << to << endl;
    return;
  }
  hanoi(n - 1, from, to, aux);
  cout << "Move disk " << n << " from rod " << from << " to rod " << to << endl;
  hanoi(n - 1, aux, from, to);
}

int main() {
  int n = 3;                // Number of disks
  hanoi(n, 'A', 'B', 'C');  // A, B and C are names of rods
  return 0;
}
